#include "util/Time.h"

#include <sys/timeb.h>


NAMESPACE_BEGIN(tingo)

//=============================================================================
//                                                                            
//                                                               
//
//=============================================================================
Time::Time()
{
	timeb t;
	ftime(&t);
	mMilliseconds = 1000 * t.time + t.millitm;
}

//=============================================================================
//
//
//
//=============================================================================
Time::Time(int64 milliseconds) :
mMilliseconds(milliseconds)
{
}

//=============================================================================
//
//
//
//=============================================================================
Time::Time(const Time& time)
{
	if (&time != this)
	{
		mMilliseconds = time.mMilliseconds;
	}

}

//=============================================================================
//
//
//
//=============================================================================
Time::~Time()
{
}

//=============================================================================
//
//
//
//=============================================================================
Time& Time::operator =(const Time& time)
{
	if(&time != this)
	{
		mMilliseconds = time.mMilliseconds;
	}
	return *this;
}

//=============================================================================
//
//
//
//=============================================================================
bool Time::operator ==(const Time& time) const
{
	return mMilliseconds == time.mMilliseconds;
}

//=============================================================================
//
//
//
//=============================================================================
bool Time::operator !=(const Time& time) const
{
	return mMilliseconds != time.mMilliseconds;
}

//=============================================================================
//
//
//
//=============================================================================
bool Time::operator >(const Time& time) const
{
	return mMilliseconds > time.mMilliseconds;
}

//=============================================================================
//
//
//
//=============================================================================
bool Time::operator <(const Time& time) const
{
	return mMilliseconds < time.mMilliseconds;
}

//=============================================================================
//
//
//
//=============================================================================
bool Time::operator >=(const Time& time) const
{
	return mMilliseconds >= time.mMilliseconds;
}
//=============================================================================
//
//
//
//=============================================================================
bool Time::operator <=(const Time& time) const
{
	return mMilliseconds <= time.mMilliseconds;
}

//=============================================================================
//
//
//
//=============================================================================
bool Time::before(const Time& time) const
{
	return mMilliseconds < time.mMilliseconds;
}

//=============================================================================
//
//
//
//=============================================================================
bool Time::after(const Time& time) const
{
	return mMilliseconds > time.mMilliseconds;
}

//=============================================================================
//
//
//
//=============================================================================
int64 Time::getTime() const
{
	return mMilliseconds;
}

//=============================================================================
//
//
//
//=============================================================================
void Time::setTime(int64 milliseconds) 
{
	mMilliseconds = milliseconds;
}

//=============================================================================
//
//
//
//=============================================================================
int64 Time::getSystemTime()
{
	timeb t;
	ftime(&t);
	return 1000 * t.time + t.millitm;
}

//=============================================================================
//
//
//
//=============================================================================
ostream& operator<<(ostream& os, const Time& time)
{
	os << time.mMilliseconds;
	return os;
}

NAMESPACE_END